
"""-----------------------参数设置-----------------------"""
class_num=10     # 类别数量
batch_size=128  # 每次训练的样本数量
epochs=20      # 训练轮数
lr=0.002     # 学习率
save_current_model=0  # 是否保存当前轮模型的参数,用于调参界面修改
save_step=4   # 每多少轮保存一次模型



"""-----------------------GUI界面动态的改变模型参数-----------------------"""
import  tkinter as tk
import threading


variables = {
    "epochs":epochs , 'lr':lr , "save_current_model":save_current_model
}

def change_param():

    # 函数中的函数，这个是回调函数
    def modify_variable(var_name, new_value,  root):

        var_type = type(variables[var_name])
        if  var_type == int:
            new_value = int(new_value)
        else:
            new_value = float(new_value)
        variables[var_name] = var_type(new_value)  # 输入框输入的是字符串，需要转换成对应的类型
        label = tk.Label(root, text=f"当前变量值:\n {variables}")
        label.pack(pady=10)

    root = tk.Tk()
    root.title("修改模型的变量值")
    root.geometry("400x400")

    for var_name in variables:
        frame = tk.Frame(root) #  每个变量创建一个显示子页面
        frame.pack(pady=5)

        label = tk.Label(frame, text=var_name) #  显示变量名
        label.pack(side=tk.LEFT)

        entry = tk.Entry(frame, width=10) #   设置一个输入框
        entry.pack(side=tk.LEFT)

        #  点击确认按钮，然后调用回调函数，修改变量值
        button = tk.Button(frame, text="确认改变",
                           command=lambda name=var_name, entry=entry: modify_variable(name, entry.get(),root) )

        button.pack(side=tk.LEFT)

    root.mainloop()  # 显示GUI界面
    root.destroy()



"""-----------------终端命令传参---------------------------"""

def cli_param():
    import argparse
    parser = argparse.ArgumentParser()

    # 设置文件夹路径
    parser.add_argument('--model_path', type=str, default='./models', help='path for saving trained models')
    parser.add_argument('--dataset_dir', type=str, default='../datasets', help='directory for resized images')

    # 设置保存步长
    parser.add_argument('--save_step', type=int, default=save_step, help='step size for saving trained models')

    # 设置超参数
    parser.add_argument('--epochs', type=int, default=epochs, help='number of training epochs')
    parser.add_argument('--batch_size', type=int, default=batch_size, help='batch size for training')
    parser.add_argument('--lr', type=float, default=lr, help='learning rate')

    config = parser.parse_args(args=[])

    print(config)
    return  config



